// pages/peasantListPage/index.js
// const xlsx = require("../../utils/xlsx.full.min");
Page({

  /**
   * 页面的初始数据
   */
  data: {
    year: "",
    yearArr: [],
    index: 0,
    name: "",
    idNumber: "",
    peasantList: [], //种植户列表
    savedRes: null,
  },
  deleteData(e) {
    console.log(e.currentTarget.dataset.orderid);
    const that = this;
    wx.showModal({
      title: '删除',
      content: `确定要删除该条记录吗？`,
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '删除中，请稍等',
          });
          wx.cloud.callFunction({
            name: 'peasantServer', // 云函数名称
            data: {
              type: "deleteRecord",
              _id: e.currentTarget.dataset.orderid
            },
            success: res => {
              wx.hideLoading();
              if (res.result.success) {
                wx.showToast({
                  title: '删除成功',
                  icon: 'success',
                  success() {
                    let timer = setTimeout(() => {
                      that.searchPeasantList();
                      clearTimeout(timer);
                    }, 500);
                  }
                });
              } else {
                wx.showToast({
                  title: '删除失败',
                  icon: 'error'
                });
              }
              console.log('删除结果', res);
            },
            fail: err => {
              console.error('调用失败', err);
            }
          });
        }
      }
    });
  },
  calculateColWidths(data) {
    const colWidths = [];
    data.forEach(row => {
      Object.values(row).forEach((cell, colIndex) => {
        const length = String(cell).length * 2; // 8为字符宽度系数
        if (!colWidths[colIndex] || length > colWidths[colIndex]) {
          colWidths[colIndex] = length;
        }
      });
    });
    console.log(colWidths, "colWidths");
    return colWidths.map(w => ({
      width: w > 15 ? w : 15
    }));
  },
  sendMessage: function () {
    console.log(this.data.savedRes);
    wx.sendMessage({
      filePath: this.data.savedRes.savedFilePath,
      complete: () => wx.showToast({
        title: '已发送到文件传输助手'
      })
    });
  },
  reset: function () {
    this.setData({
      name: "",
      idNumber: ""
    })
  },
  // 将数据导出xlsx文件
  exportXlsxFile: async function (event) {
    wx.showLoading({
      title: '导出中，请稍等',
    });
    try {
      const data = this.data.peasantList;
      const that = this;
      console.log(data, 'data');
      // 2. 转换数据格式
      const excelData = data.map(item => {
        return {
          '年度': item.year,
          '交粮粮站': item.acquisitionSitePoint,
          '乡镇': item.town,
          '村': item.village,
          '组': item.group,
          '姓名': item.peasantName,
          '身份证号': item.idNumber,
          '联系方式': item.phone,
          '数量(kg)': item.sellNum,
          '单价(元/kg)': item.orderPrice,
          '金额(元)': item.sellMoney,
          '银行名称': item.bankName,
          '银行卡号': item.bankCode,
          '收购日期': item.acquisitionDate,
          '登记人': item.registrant
        };
      });
      let tableData = [Object.keys(excelData[0])];
      excelData.forEach(item => {
        tableData.push(Object.values(item));
      })

      console.log(tableData);

      wx.cloud.callFunction({
        name: 'peasantServer', // 云函数名称
        data: {
          type: "exportXlsxFile",
          year: this.data.year, // 查询年份
          tableData
        },
        success: response => {
          wx.hideLoading()
          console.log(response);
          // 7. 提示用户下载
          wx.showModal({
            title: '导出成功',
            content: '手机端需通过微信文件传输助手导出文件，电脑端可直接导出文件',
            confirmText: '立即打开',
            // cancelText: '复制链接',
            success(res) {
              console.log(res);
              if (res.confirm) {
                console.log(response.result.url1);
                wx.cloud.downloadFile({
                  fileID: response.result.fileId, // 替换为实际FileID
                  success: res => {
                    wx.openDocument({
                      filePath: res.tempFilePath,
                      fileType: 'xlsx',
                      showMenu: true, // 显示右上角菜单，允许用户转发和保存
                      fail: err => console.error('打开失败', err)
                    });
                  }
                });

                // wx.openDocument({
                //   filePath:`${response.result.url1}`,
                //   showMenu: true, // 显示右上角菜单，允许用户转发和保存
                //   fileType: 'xlsx'
                // });
              } else {

              }
            },
            fail: (err) => console.error('弹窗调用失败', err)
          });
        },
        fail: err => {
          wx.hideLoading()
          console.error('调用失败', err);
        }
      });

      return;

      // 3. 创建工作簿和工作表
      const wb = xlsx.utils.book_new();
      const headers = ['年度', '交粮粮站', '乡镇', '村', '组', '姓名', '身份证号', '联系方式', '数量(kg)', '单价(元/kg)', '金额(元)', '银行名称', '银行卡号', '收购日期', '登记人'];
      const rows = excelData.map(item => Object.values(item));
      const centerAlign = {
        alignment: {
          horizontal: 'center',
          vertical: 'center'
        }
      };

      // 创建工作表
      const ws = {};

      // 添加表头
      headers.forEach((header, colIndex) => {
        const cellRef = xlsx.utils.encode_cell({
          r: 0,
          c: colIndex
        });
        ws[cellRef] = {
          v: header,
          t: 's',
          s: centerAlign
        };
      });

      // 添加数据行
      rows.forEach((row, rowIndex) => {
        row.forEach((value, colIndex) => {
          const cellRef = xlsx.utils.encode_cell({
            r: rowIndex + 1,
            c: colIndex
          });
          ws[cellRef] = {
            v: value,
            t: 's',
            s: centerAlign
          };
        });
      });

      // 设置工作表范围
      ws['!ref'] = xlsx.utils.encode_range({
        s: {
          r: 0,
          c: 0
        },
        e: {
          r: rows.length,
          c: headers.length - 1
        }
      });
      // // 设置单元格居中对齐样式
      // const centerAlign = {
      //   alignment: {
      //     horizontal: 'center',
      //     vertical: 'center'
      //   }
      // };

      // // 为每个单元格应用样式
      // const ws = xlsx.utils.json_to_sheet(excelData);
      // const range = xlsx.utils.decode_range(ws['!ref']); // 获取工作表范围

      // for (let row = range.s.r; row <= range.e.r; ++row) {
      //   for (let col = range.s.c; col <= range.e.c; ++col) {
      //     const cellRef = xlsx.utils.encode_cell({
      //       r: row,
      //       c: col
      //     });
      //     if (ws[cellRef]) {
      //       ws[cellRef].s = centerAlign; // 应用居中样式
      //     }
      //   }
      // }
      // // const ws = xlsx.utils.json_to_sheet(excelData);
      // // 3.1 设置自适应列宽
      ws['!cols'] = this.calculateColWidths(excelData); // 设置列宽

      // 4. 将工作表添加到工作簿
      xlsx.utils.book_append_sheet(wb, ws, this.data.year + "年收购数据");

      // 5. 生成Excel文件
      const wbout = xlsx.write(wb, {
        type: 'array',
        bookType: 'xlsx'
      });

      // 6. 保存到本地
      const filePath = `${wx.env.USER_DATA_PATH}/export_${Date.now()}.xlsx`;
      wx.getFileSystemManager().writeFile({
        filePath: filePath,
        data: wbout,
        encoding: 'binary',
        success: () => {
          // 判断系统类型
          const deviceInfo = wx.getDeviceInfo();
          console.log(deviceInfo, "deviceInfo", deviceInfo.platform === 'ios');
          if (deviceInfo.platform.toLowerCase() === 'ios') {
            console.log("苹果手机");
            try {
              // iOS专属提示
              // wx.showModal({
              //   content: 'iOS系统需通过微信文件传输助手导出文件',
              //   confirmText: '复制文件路径'
              // });
              wx.showModal({
                title: '导出成功',
                content: `手机端需通过微信文件传输助手导出文件`,
                confirmText: '立即打开',
                // cancelText: '复制链接',
                success(res) {
                  console.log(res);
                  if (res.confirm) {
                    wx.openDocument({
                      filePath,
                      showMenu: true, // 显示右上角菜单，允许用户转发和保存
                      fileType: 'xlsx'
                    });
                  } else {
                    console.log("保存文件");
                    // try {
                    //   wx.getSetting({
                    //     success: (res) => {
                    //       if (!res.authSetting['scope.writePhotosAlbum']) {
                    //         wx.authorize({
                    //           scope: 'scope.writePhotosAlbum',
                    //           success() {
                    //             // 通过文件传输助手发送
                    //             wx.saveFile({
                    //               tempFilePath: filePath,
                    //               success: (savedRes) => {
                    //                 console.log(savedRes, "savedRes");
                    //                 that.setData({
                    //                   savedRes: savedRes
                    //                 })
                    //               }
                    //             });
                    //           }
                    //         });

                    //       }
                    //     }
                    //   });

                    // } catch (err) {
                    //   console.error('iOS处理失败', err);
                    //   wx.showToast({
                    //     title: '操作失败',
                    //     icon: 'none'
                    //   });
                    // }

                  }
                },
                fail: (err) => console.error('弹窗调用失败', err)
              });
            } catch (err) {
              console.error('iOS处理失败', err);
              wx.showToast({
                title: '操作失败',
                icon: 'none'
              });
            }

          } else {
            // 7. 提示用户下载
            wx.showModal({
              title: '导出成功',
              content: '手机端需通过微信文件传输助手导出文件，电脑端可直接导出文件',
              confirmText: '立即打开',
              // cancelText: '复制链接',
              success(res) {
                console.log(res);
                if (res.confirm) {
                  wx.openDocument({
                    filePath,
                    showMenu: true, // 显示右上角菜单，允许用户转发和保存
                    fileType: 'xlsx'
                  });
                } else {

                }
              },
              fail: (err) => console.error('弹窗调用失败', err)
            });
          }

        },
        fail: (err) => {
          console.error('文件保存失败', err);
          wx.showToast({
            title: '导出失败',
            icon: 'none'
          });
        }
      });
    } catch (err) {
      wx.hideLoading()
      console.error('导出过程中出错', err);
      wx.showToast({
        title: '导出出错',
        icon: 'none'
      });
    }
  },
  searchPeasantList: function (e) {
    if (this.data.idNumber) {
      // 校验身份证号是否正确
      if (!this.validateIDCardBasic(parseInt(this.data.idNumber))) {
        wx.showModal({
          title: '错误',
          content: '身份证格式错误!',
          showCancel: false
        })
        return;
      }
    }
    // 开始检索
    wx.showLoading({
      title: '查询中，请稍等',
    });
    console.log(this.data.year, this.data.idNumber, this.data.name);
    wx.cloud.callFunction({
      name: 'peasantServer', // 云函数名称
      data: {
        type: "queryPeasant",
        year: this.data.year, // 查询年份
        peasantName: this.data.name, // 农户姓名（精确或模糊）
        idNumber: this.data.idNumber // 身份证号（精确或模糊）
      },
      success: res => {
        wx.hideLoading();
        console.log('查询结果', res);
        this.setData({
          peasantList: res.result.data
        })
      },
      fail: err => {
        console.error('调用失败', err);
      }
    });
  },
  validateIDCardBasic: function (idCard) {
    // 18位或15位身份证正则（18位支持X/x校验码）
    const reg = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/;
    return reg.test(idCard);
  },
  bindYearChange: function (e) {
    this.setData({
      year: this.data.yearArr[parseInt(e.detail.value)]
    })
  },
  handleNameInput: function (e) {
    this.setData({
      name: e.detail.value
    });
  },
  handleIdNumberInput: function (e) {
    this.setData({
      idNumber: e.detail.value
    });
  },
  backFun: function () {
    wx.navigateBack({
      delta: 1 // 返回上一页，若设为2则返回上两页
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getAllYear();
    // this.getAllUser();
  },
  getAllYear: async function (params) {
    wx.showLoading({
      title: '数据加载中...',
    });
    let yearData = await wx.cloud
      .callFunction({
        name: 'peasantServer',
        data: {
          type: 'queryAllYear',
        },
      })
    wx.hideLoading();
    console.log(yearData, "yearData");
    let arr = yearData.result;
    arr.sort((a, b) => parseInt(b) - parseInt(a));
    this.setData({
      yearArr: arr,
      year: arr[0]
    });
    this.searchPeasantList();
  },
  toOrderDetail: function (e) {
    console.log(e);
    wx.navigateTo({
      url: '/pages/buyDetailPage/index?id=' + e.currentTarget.dataset.orderid
    });
  },
  toOrderList(e) {
    // 跳订单列表
    wx.navigateTo({
      url: `/pages/orderListPage/index?id=${e.currentTarget.dataset.peasantid}`
    });
  },
  async getAllUser() {
    wx.showLoading({
      title: '数据加载中...',
    });
    let peasantData = await wx.cloud
      .callFunction({
        name: 'peasantServer',
        data: {
          type: 'queryAllUser',
        },
      })
    wx.hideLoading();
    if (peasantData.errMsg == 'cloud.callFunction:ok') {
      this.setData({
        peasantList: peasantData.result
      })
    }

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})